<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>The compositecomponentlogin Example Application - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level3"><a href="gkhwv.html">Attributes of a Composite Component</a></p>
<p class="toc level3"><a href="gkhuo.html">Invoking a Managed Bean</a></p>
<p class="toc level3"><a href="gkhwo.html">Validating Composite Component Values</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3"><a href="">The <tt>compositecomponentlogin</tt> Example Application</a></p>
<p class="toc level4"><a href="#gkhuu">The Composite Component File</a></p>
<p class="toc level4"><a href="#gkhvx">The Using Page</a></p>
<p class="toc level4"><a href="#gkhvq">The Managed Bean</a></p>
<p class="toc level4"><a href="#glecv">Building, Packaging, Deploying, and Running the <tt>compositecomponentlogin</tt> Example</a></p>
<p class="toc level5"><a href="#gkhvc">To Build, Package, and Deploy the <tt>compositecomponentlogin</tt> Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="#gleae">To Build, Package, and Deploy the <tt>compositecomponentlogin</tt> Example Using Ant</a></p>
<p class="toc level5"><a href="#gleeu">To Run the <tt>compositecomponentlogin</tt> Example</a></p>
</div>
<p class="toc level2 tocsp"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="gkhwo.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="bnavg.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="gkhvn"></a><h2>The <tt>compositecomponentlogin</tt> Example Application</h2>
<a name="indexterm-864"></a><a name="indexterm-865"></a><p>The <tt>compositecomponentlogin</tt> application creates a composite component that accepts a username and password.
The component interacts with a managed bean. The component stores the username and
password in the managed bean, retrieves the values from the bean, and displays
these values on the Login page.</p>

<p>The <tt>compositecomponentlogin</tt> application has a composite component file, a using page, and a
managed bean.</p>

<p>The source code for this application is in the <tt></tt><i>tut-install</i><tt>/examples/web/compositecomponentlogin/</tt> directory.</p>



<a name="gkhuu"></a><h3>The Composite Component File</h3>
<p>The composite component file is an XHTML file, <tt>/web/resources/ezcomp/LoginPanel.xhtml</tt>. It has a
<tt>composite:interface</tt> section that declares the labels for the username, password, and login button.
It also declares a managed bean, which defines properties for the username and
password. </p>

<pre>&lt;composite:interface>
    &lt;composite:attribute name="namePrompt" default="Username: "/>
    &lt;composite:attribute name="passwordPrompt" default="Password: "/>

    &lt;composite:attribute name="loginButtonText" default="Log In"/>
    &lt;composite:attribute name="loginAction" 
                         method-signature="java.lang.String action()"/>
    &lt;composite:attribute name="myLoginBean"/>
    &lt;composite:editableValueHolder name="vals" targets="form:name"/>
    &lt;composite:editableValueHolder name="passwordVal" targets="form:password"/>
&lt;/composite:interface></pre><p>The composite component implementation accepts input values for the username and password properties
of the managed bean.</p>

<pre>&lt;composite:implementation>
    &lt;h:form id="form">
        &lt;h:panelGrid columns="2" summary="">
            &lt;h:outputLabel for="name" 
                           value="#{cc.attrs.namePrompt}"/>
            &lt;h:inputText id="name" value="#{cc.attrs.myloginBean.name}" 
                         required="true"/>
            &lt;h:outputLabel for="password" 
                           value="#{cc.attrs.passwordPrompt}"/>
            &lt;h:inputSecret id="password" 
                           value="#{cc.attrs.myloginBean.password}" 
                           required="true"/>
        &lt;/h:panelGrid/>
        &lt;p>
        &lt;h:commandButton id="loginButton" 
                         value="#{cc.attrs.loginButtonText}" 
                         action="#{cc.attrs.loginAction}"/>
        &lt;/p>
    &lt;/h:form>
    ...
&lt;/composite:implementation></pre>

<a name="gkhvx"></a><h3>The Using Page</h3>
<p>The using page in this example application, <tt>web/index.xhtml</tt>, is an XHTML file that
invokes the login composite component file along with the managed bean. It validates
the user's input.</p>

<pre>&lt;div id="compositecomponent">
    &lt;ez:LoginPanel myLoginBean="#{myLoginBean}"  
                   loginAction="#{myLoginBean.login}">
         &lt;f:validateLength maximum="10" minimum="4" for="vals" />
         &lt;f:validateRegex pattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,10})"
                          for="passwordVal"/>
    &lt;/ez:LoginPanel>
&lt;/div></pre><p>The <tt>f:validateLength</tt> tag requires the username to have from 4 to 10 characters.</p>

<p>The <tt>f:validateRegex</tt> tag requires the password to have from 4 to 10 characters
and to contain at least one digit, one lowercase letter, and one uppercase
letter,.</p>



<a name="gkhvq"></a><h3>The Managed Bean</h3>
<p>The managed bean, <tt>src/java/compositecomponentlogin/MyLoginBean.java</tt>, defines a method called <tt>login</tt>, which retrieves the values
of the username and password.</p>

<pre>@ManagedBean
@RequestScoped
public class MyLoginBean {

    private String name;
    private String password;

    public MyLoginBean() {
    }

    public myloginBean(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String newValue) {
        password = newValue;
    }

    public String getName() {
        return name;
    }

    public void setName(String newValue) {
        name = newValue;
    }

    public String login() {
        if (getName().equals("javaee")) {
            String msg = "Success.  Your username is " + getName()
                    + ", and your password is " + getPassword();
            FacesMessage facesMsg = new FacesMessage(msg, msg);
            FacesContext.getCurrentInstance().addMessage(null, facesMsg);
            return "index";
        } else {
            String msg = "Failure. Your username is " + getName()
                    + ", and your password is " + getPassword();
            FacesMessage facesMsg = 
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
            FacesContext.getCurrentInstance().addMessage(null, facesMsg);
            return "index";
        }
    }
}</pre>

<a name="glecv"></a><h3>Building, Packaging, Deploying, and Running the <tt>compositecomponentlogin</tt> Example</h3>
<p>You can use either NetBeans IDE or Ant to build, package, deploy, and
run the  <tt>compositecomponentlogin</tt> example.</p>



<a name="gkhvc"></a><h4>To Build, Package, and Deploy the <tt>compositecomponentlogin</tt> Example Using NetBeans IDE</h4>
<ol>
<li><b>From the File menu, choose Open Project.</b></li>
<li><b>In the Open Project dialog, navigate to <tt></tt><i>tut-install</i><tt>/examples/web/</tt>.</b></li>
<li><b>Select the <tt>compositecomponentlogin</tt> folder.</b></li>
<li><b>Select the Open as Main Project checkbox.</b></li>
<li><b>Click Open Project.</b></li>
<li><b>In the Projects tab, right-click <tt>compositecomponentlogin</tt> and select Deploy.</b></li></ol>

<a name="gleae"></a><h4>To Build, Package, and Deploy the <tt>compositecomponentlogin</tt> Example Using Ant</h4>
<ol>
<li><b>In a terminal window, go to:</b><pre><tt></tt><i>tut-install</i><tt>/examples/web/compositecomponentlogin/</tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant</b></tt></pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant deploy</b></tt></pre></li></ol>

<a name="gleeu"></a><h4>To Run the <tt>compositecomponentlogin</tt> Example</h4>
<ol>
<li><b>In a web browser, type the following URL:</b><pre><tt><b>http://localhost:8080/compositecomponentlogin/</b></tt></pre><p>The Login Component page opens.</p></li>
<li><b>Type values in the Username and Password fields, then click the Log In
button.</b><p>Because of the way the <tt>login</tt> method is coded, the login succeeds only
if the username is <tt>javaee</tt>.</p><p>Because of the <tt>f:validateLength</tt> tag, if the username has fewer than 4 characters
or more than 10 characters, a validation error message appears.</p><p>Because of the <tt>f:validateRegex</tt> tag, if the password has fewer than 4 characters
or more than 10 characters or does not contain at least one digit,
one lowercase letter, and one uppercase letter, a &ldquo;Regex Pattern not matched&rdquo; error
message appears.</p></li></ol>
         </div>
         <div class="navigation">
             <a href="gkhwo.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="bnavg.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

